package com.lanchetech.user.service;


import com.lanchetech.bean.dto.AppointmentHourDTO;
import com.lanchetech.bean.request.*;
import com.lanchetech.bean.response.*;
import com.lanchetech.bean.vo.*;
import com.lanchetech.common.exception.ResultCodeException;
import com.lanchetech.entity.*;

import java.util.List;
import java.util.Map;


public interface ProductService {

    ResultData<FlashSaleVO> getFlashSaleActivity(PageReq req, User user);

    ResultData<BasePageResp<Packages>> getPackagePage(PageReq req);

    ResultData<PackageResp> getPackageDetail(Long id);

    ResultData<ProductResp> getProductDetail(ProductReq req, User user) throws ResultCodeException;

    ResultData<List<AppointmentHourDTO>> getSpuAppointmentByDate(PageReq req);

    ResultData<Spu> getSpu(Long id);

    ResultData<List<Sku>> getSkuList(ProductReq req, User user) throws ResultCodeException;

    ResultData<List<SpuAttributeVO>> getAttributeList(Long spuId);

    ResultData<BasePageResp<SpuResp>> getSpuPage(SpuPageReq req, User user);

    ResultData<BasePageResp<ShopSpuVO>> getShopSpuPage(SpuPageReq req);

    ResultData<BasePageResp<OrderCommentResp>> getCommentPage(PageReq req);

    ResultData<CollectionShoppingCartVO> getTraceCollectionShoppingCart(User user, Long spuId);

    ResultData<String> createProductShareQrcode(User user, Long spuId, String activityType, Long activityId, boolean share);

    ResultData<ZoneVO> getZoneSpuDetail(Long zoneId);

    ResultData<Long> editSelectionApply(SelectionApply req);

    BaseResp deleteSelectionApply(Long id);

    BaseResp editSelection(SelectionReq req);

    BaseResp uploadSelection(SelectionBatchReq req);

    BaseResp deleteSelection(Long id);

    ResultData<BasePageResp<SelectionApplyVO>> getMySelectionApplyPage(PageReq req, User user);

    ResultData<SelectionApplyVO> getSelectionApplyDetail(User user);

    ResultData<Selection> getSelectionDetail(Long id);

    ResultData<BasePageResp<Selection>> getMySelectionPage(PageReq req);

    ResultData<List<Selection>> getMySelectionList(Long id);

    ResultData<BasePageResp<FlashSaleSpuItemVO>> getFlashSpuPage(PageReq req, User user);

    ResultData<BasePageResp<BossRankingVo>> getBossRanking(PageReq req);

    ResultData<BasePageResp<SpuResp>> getProductDetailTwoStage(SpuPageReq req, User user);

    ResultData<BasePageResp<SpuResp>> like(SpuPageReq req, User user);
}